"""

头部六舵机通用动作
@date 2018-1-17
"""

import serial
import time
import codecs
import general_position
from action import take_action

ser = serial.Serial('/dev/HLF_HEAD', 115200, timeout=0.1)  # 初始化串口


# 动作执行
def take_general_action(position):
    if position == general_position.HEAD:
        head_action()
    elif position == general_position.EYE_LEFT:
        eye_left_action()
    elif position == general_position.EYE_RIGHT:
        eye_right_action()
    elif position == general_position.EYE:
        eye_action()
    elif position == general_position.EYE_BALL:
        eyeball_action()
    elif position == general_position.MOUTH:
        mouth_action()


# 全部复位
def reset():
    take_action(100, 108, 100, 88, 100, 90)


# 头左右动作
def head_action():
    # 头左右转动
    # 最后两位十进制 50(最右)——108(中位)——150(最左)
    ser.write(codecs.decode('02000e0000', 'hex_codec'))  # 头左右舵机速度
    time.sleep(0.005)
    ser.write(codecs.decode(('02000d00' + hex(128)[2:]), 'hex_codec'))  # 头左
    time.sleep(0.5)
    ser.write(codecs.decode(('02000d00' + hex(88)[2:]), 'hex_codec'))  # 头右
    time.sleep(0.5)
    ser.write(codecs.decode(('02000d00' + hex(108)[2:]), 'hex_codec'))  # 头复位
    time.sleep(0.005)


# 左眼皮开闭
def eye_left_action():
    # 最后两位十进制 150(闭合)——100——80(最开)
    ser.write(codecs.decode('0200140000', 'hex_codec'))  # 左眼皮舵机速度
    time.sleep(0.005)
    ser.write(codecs.decode(('02001300' + hex(80)[2:]), 'hex_codec'))  # 左眼皮张开
    time.sleep(0.5)
    ser.write(codecs.decode(('02001300' + hex(100)[2:]), 'hex_codec'))  # 左眼皮复位
    time.sleep(0.005)


# 右眼皮开闭
def eye_right_action():
    # 最后两位十进制 60(闭合)——88——130(最开)
    ser.write(codecs.decode('0200170000', 'hex_codec'))  # 右眼皮舵机速度
    time.sleep(0.005)
    ser.write(codecs.decode(('02001600' + hex(108)[2:]), 'hex_codec'))  # 右眼皮张开
    time.sleep(0.5)
    ser.write(codecs.decode(('02001600' + hex(88)[2:]), 'hex_codec'))  # 右眼皮复位
    time.sleep(0.005)


# 左右眼皮开闭
def eye_action():
    ser.write(codecs.decode('0200170000', 'hex_codec'))  # 右眼皮舵机速度
    time.sleep(0.005)
    ser.write(codecs.decode('0200140000', 'hex_codec'))  # 左眼皮舵机速度
    time.sleep(0.005)
    ser.write(codecs.decode(('02001600' + hex(108)[2:]), 'hex_codec'))  # 右眼皮张开
    time.sleep(0.005)
    ser.write(codecs.decode(('02001300' + hex(80)[2:]), 'hex_codec'))  # 左眼皮张开
    time.sleep(0.5)
    ser.write(codecs.decode(('02001600' + hex(88)[2:]), 'hex_codec'))  # 右眼皮复位
    time.sleep(0.005)
    ser.write(codecs.decode(('02001300' + hex(100)[2:]), 'hex_codec'))  # 左眼皮复位
    time.sleep(0.005)


# 眼珠
def eyeball_action():
    # 最后两位十进制 95(最左)——100(中位)——105(最右)
    ser.write(codecs.decode('02001a0000', 'hex_codec'))  # 眼球舵机速度
    time.sleep(0.005)
    ser.write(codecs.decode(('02001900' + hex(105)[2:]), 'hex_codec'))  # 眼球右转
    time.sleep(0.5)
    ser.write(codecs.decode(('02001900' + hex(100)[2:]), 'hex_codec'))  # 眼球复位
    time.sleep(0.005)


# 嘴巴开闭
def mouth_action():
    # 最后两位十进制 90(闭合)——130(最开)
    ser.write(codecs.decode('0200110000', 'hex_codec'))  # 嘴巴舵机速度
    time.sleep(0.005)
    ser.write(codecs.decode(('02001000' + hex(115)[2:]), 'hex_codec'))  # 嘴巴张开
    time.sleep(0.5)
    ser.write(codecs.decode(('02001000' + hex(90)[2:]), 'hex_codec'))  # 嘴巴复位
    time.sleep(0.005)
